#!/bin/bash

# 定义镜像前缀（可选，方便区分项目镜像）
IMAGE_PREFIX="springcloud-peipline/"

# 递归查找所有包含 Dockerfile 的 docker 目录（确保是模块的 docker 目录）
find . -type f -path "*/docker/Dockerfile" ! -path "*/docker/*/Dockerfile" | while read -r dockerfile; do
    # 获取 docker 目录路径（如 ./gateway/docker）
    docker_dir=$(dirname "$dockerfile")
    # 获取模块名称（如 gateway、seata-account，从 docker 目录的父目录提取）
    module_name=$(basename "$(dirname "$docker_dir")")
    # 对应的 target 目录路径（如 ./gateway/target）
    target_dir=$(dirname "$docker_dir")/target

    echo "======================================"
    echo "处理模块: $module_name"
    echo "docker目录: $docker_dir"
    echo "target目录: $target_dir"

    # 1. 移动 target 下的 JAR 包到 docker 目录
    if [ -d "$target_dir" ]; then
        # 查找 target 下的 JAR 包（假设每个模块只有一个可执行 JAR）
        jar_file=$(find "$target_dir" -maxdepth 1 -type f -name "*.jar" | head -n 1)
        if [ -n "$jar_file" ]; then
            mv "$jar_file" "$docker_dir/"
            echo "已移动 JAR 包: $(basename "$jar_file") -> $docker_dir"
        else
            echo "警告：$target_dir 下未找到 JAR 包，跳过移动"
            continue  # 没有 JAR 包则不构建镜像
        fi
    else
        echo "警告：$target_dir 不存在，跳过移动"
        continue
    fi

    # 2. 进入 docker 目录构建镜像
    cd "$docker_dir" || {
        echo "警告：无法进入 $docker_dir，跳过构建"
        continue
    }

    # 定义镜像名（如 springcloud-peipline/gateway:latest）
    image_name="${IMAGE_PREFIX}${module_name}:latest"
    # 执行 docker build 并捕获结果
    if docker build -t "$image_name" .; then
        echo "模块 $module_name 镜像构建成功: $image_name"
    else
        echo "模块 $module_name 镜像构建失败"
    fi

    # 构建完成后返回项目根目录（避免循环中目录混乱）
    cd - > /dev/null || exit

    if [ $? -eq 0 ]; then
        echo "模块 $module_name 镜像构建成功: $image_name"
    else
        echo "模块 $module_name 镜像构建失败"
    fi
done

# 清理悬空镜像（none镜像）
docker images -f "dangling=true" -q | xargs -r docker rmi

echo "======================================"
echo "所有模块处理完成"